﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using modActor;
using modUtileria;
using modDatos;
using modPeticiones;
using modLanGame;

namespace modElenco
{
    public class CAsteroideMng : CActor 
    {
        CAsteroideMngDatos dataAsteroid;
        

        public CAsteroideMng()
        {
            base.init();

            dataAsteroid = new CAsteroideMngDatos();
            dataAsteroid.data = new List<CAsteroidesDatos>();

            data.escenarioDatos.primarykey = "AsteroidMng";

            dataAsteroid.asteroides = new Microsoft.Xna.Framework.Graphics.Texture2D[3];

            dataAsteroid.asteroides[0] = SCutileria.darTextura2D("Asteroides/Asteoides");
            dataAsteroid.asteroides[1] = SCutileria.darTextura2D("Asteroides/Asteoides2");
            dataAsteroid.asteroides[2] = SCutileria.darTextura2D("Asteroides/Asteoides3");

            data.drawDatos.frameActual = 1;
            data.drawDatos.frameTotal = 1;

            data.botLimit = 500;
            data.topLimit = 0;
            data.leftLimit = 950;
            data.rightLimit = 0;
        }

        public override void ensayar(Microsoft.Xna.Framework.GameTime gameTime)
        {
            base.ensayar(gameTime);

            //creo un nuevo asteroide
            CAsteroidesDatos newAsteroid = new CAsteroidesDatos();
            Random rand = new Random();

            int cantAsteroides = SCPeticion.BuscarDatos("Asteroid").Count;

            if (cantAsteroides < 7)
            {
                newAsteroid.textura = rand.Next(3);
                newAsteroid.vida = 1;
                if (rand.Next(10) >= 5)
                {
                    //es horizontal
                    newAsteroid.posicionActual.Y = rand.Next(500);
                    newAsteroid.posicionActual.X = 0;
                    newAsteroid.pocisionAnterior.Y = 1;
                }
                else
                {
                    //es vertical
                    newAsteroid.posicionActual.X = rand.Next(900);
                    newAsteroid.posicionActual.Y = 0;
                    newAsteroid.pocisionAnterior.Y = -1;
                }
                newAsteroid.name = "Asteroid" + (cantAsteroides + rand.Next(99999));

                while (SCPeticion.DatosGame.ContainsKey(newAsteroid.name))
                {
                    newAsteroid.name = "Asteroid" + (cantAsteroides + rand.Next(99999));
                }
                SCPeticion.DatosGame.Add(newAsteroid.name, newAsteroid);
            } 
           
            CAsteroidesDatos newAsteroid2 = new CAsteroidesDatos();
            Dictionary<string, CDataGameBase> buff = new Dictionary<string, CDataGameBase>();
            bool NoAgrega = false;

            //muevo los asteroides
            foreach (KeyValuePair<string, CDataGameBase> item in SCPeticion.BuscarDatos("Asteroid"))
            {
                newAsteroid2 = (CAsteroidesDatos)item.Value;

                if (newAsteroid2.pocisionAnterior.Y == 1)
                {
                    //es horizontal
                    newAsteroid2.posicionActual.X += 5;
                    if (newAsteroid2.posicionActual.X > data.leftLimit || newAsteroid2.vida == 0)
                    {
                        NoAgrega = true;
                    }
                    else
                        NoAgrega = false;
                }
                else
                { 
                    //es vertical
                    newAsteroid2.posicionActual.Y += 5;
                    if (newAsteroid2.posicionActual.Y > data.botLimit || newAsteroid2.vida == 0)
                    {
                        NoAgrega = true;
                    }
                    else
                    {
                        NoAgrega = false;
                    }
                }
                if(!NoAgrega)
                    buff.Add(newAsteroid2.name, newAsteroid2);
            }

            SCPeticion.EliminarDatos("Asteroid");

            foreach (KeyValuePair<string, CDataGameBase> item in buff)
            {
                SCPeticion.DatosGame.Add(item.Key, item.Value);
            }         
        }

        public override void drawInEscenary(ref Microsoft.Xna.Framework.Graphics.SpriteBatch sprite)
        {
            CAsteroidesDatos newAsteroid = new CAsteroidesDatos();
            Microsoft.Xna.Framework.Graphics.Texture2D textura;

            foreach (KeyValuePair<string, CDataGameBase> item in SCPeticion.BuscarDatos("Asteroid"))
            {
                newAsteroid = (CAsteroidesDatos)item.Value;

                switch(newAsteroid.textura)
                {
                    case 1:
                        textura = dataAsteroid.asteroides[0];
                        break;

                    case 2:
                        textura = dataAsteroid.asteroides[1];
                        break;

                    case 3:
                        textura = dataAsteroid.asteroides[2];
                        break;

                    default:
                        textura = dataAsteroid.asteroides[2];
                        break;
                }

                sprite.Draw(textura,
                    new Microsoft.Xna.Framework.Rectangle((int)newAsteroid.posicionActual.X, (int)newAsteroid.posicionActual.Y,90,90),
                    Microsoft.Xna.Framework.Color.White
                    );
            }
        }


    }
}
